package com.ftg.learn.back.question4;

import java.util.Set;
import java.util.TreeSet;
import java.util.UUID;

/**
 * @author kangjx
 * @createTime 2022/8/31
 */
public class Police {

    private Set<PersonIdcardRelation> pirs;

    public Police() {
        this.pirs = new TreeSet<>();
    }

    /**
     * 发身份证
     */
    public boolean sendIdcard(Person p,String imgsrc,String address) {
        PersonIdcardRelation temp = new PersonIdcardRelation();
        temp.setPerson(p);

        IdCard id = this.createIdcard(p.getName(),imgsrc,address);
        temp.setIdCard(id);

        //唯一标识 [单线程  1 | UUID | snow | redis ]
        temp.setPiid(this.getSnow());
        this.pirs.add(temp);
        return true;
    }

    /**
     *  vip 大黑散
     * @param p
     * @param id
     * @return
     */
    public boolean sendIdcard(Person p,IdCard id) {
        PersonIdcardRelation temp = new PersonIdcardRelation();
        temp.setPerson(p);
        temp.setIdCard(id);
        temp.setPiid(this.getSnow());
        this.pirs.add(temp);
        return false;
    }

    /**
     * 全部人员信息
     * @return
     */
    public  Set<PersonIdcardRelation> showAllPersonInfo(){
        return this.pirs;
    }


    /**
     * 全部人员信息
     * @return
     */
    public  Set<PersonIdcardRelation> showPersonInfo(String name){
        Set<PersonIdcardRelation> resultset = new TreeSet<>();
        for (PersonIdcardRelation pir : this.pirs) {
            if(pir.getPerson().getName().equals(name)){
                resultset.add(pir);
            }
        }
        return resultset;
    }

    /**
     * 生成身份证
     * @return
     */
    private IdCard createIdcard(String name,String imgsrc,String address){
        IdCard id = new IdCard();
        id.setId(this.getSnow());
        id.setName(name);
        id.setImgsrc(imgsrc);
        id.setAddress(address);
        return id;
    }

    /**
     * uuid : UUID是指在一台机器上生成的数字，它保证对在同一时空中的所有机器都是唯一的。
     */
    public static String getUUid() {
        return UUID.randomUUID().toString();
    }

    /**
     * 雪花算法：使用一个 64 bit 的 long 型的数字作为全局唯一 ID
     * 在分布式系统中的应用十分广泛，且 ID 引入了时间戳，基本上保持自增的，后面的代码中有详细的注解。
     */
    public long getSnow(){
        SnowFlake s = new SnowFlake(1L,1L,1L);
        return s.nextId();
    }


    public static void main(String[] args) {

        SnowFlake snowFlake = new SnowFlake(2,2,2);
        Person p = new Person();
        p.setAge(0);
        p.setName("张三");
        p.setPersonid(snowFlake.nextId());


        Person p1 = new Person();
        p1.setAge(0);
        p1.setName("张三");
        p1.setPersonid(snowFlake.nextId());

        Police police = new Police();
        police.sendIdcard(p,"aa.jpg","松北区2335号");
        police.sendIdcard(p1,"aa.jpg","松北区2335号");


        Set<PersonIdcardRelation> rs = police.showPersonInfo("张三");
        System.out.println(rs.size());
        rs.forEach(x->{
            System.out.print(x.getPerson().getName() +"：姓名 \t");
            System.out.print(x.getPerson().getPersonid() +"：编号 \t");
            System.out.print(x.getPerson().getAge() +"：年龄 \t");

            System.out.print(x.getIdCard().getId() +"：身份证号 \t");
            System.out.print(x.getIdCard().getImgsrc() +"：图片  \t");
            System.out.println(x.getIdCard().getAddress() +"：地址 \t");
        });
    }



}
